package com.own.component.util.excel.util.write.method;

import com.own.component.util.excel.util.write.function.AfterSheetFunction;
import com.own.component.util.excel.util.write.function.AfterWorkbookFunction;
import com.own.component.util.excel.util.write.function.GetWorkbookFunction;
import com.own.component.util.excel.util.write.method.base.BaseMetaData;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;

/**
 * BaseWriteMethod
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
public interface BaseWriteMethod extends BaseMetaData {

    /**
     * 写入excel到文件
     *
     * @return 文件对象
     */
    default File write() {
        return write(null, null);
    }

    /**
     * 写入excel到文件
     *
     * @param path 路径
     * @return 文件对象
     */
    default File write(String path) {
        return write(path, null, null);
    }

    /**
     * 写入excel到文件
     *
     * @param afterSheetFunction sheet方法
     * @return 文件对象
     */
    default File write(AfterSheetFunction afterSheetFunction) {
        return write(afterSheetFunction, null);
    }

    /**
     * 写入excel到文件
     *
     * @param afterSheetFunction    sheet方法
     * @param afterWorkbookFunction workbook方法
     * @return 文件对象
     */
    default File write(AfterSheetFunction afterSheetFunction, AfterWorkbookFunction afterWorkbookFunction) {
        return write(null, afterSheetFunction, afterWorkbookFunction);
    }

    /**
     * 写入excel到文件
     *
     * @param path                  路径
     * @param afterSheetFunction    sheet方法
     * @param afterWorkbookFunction workbook方法
     * @return 文件对象
     */
    default File write(String path, AfterSheetFunction afterSheetFunction, AfterWorkbookFunction afterWorkbookFunction) {
        return write(path, XSSFWorkbook::new, afterSheetFunction, afterWorkbookFunction);
    }

    /**
     * 写入excel到文件
     *
     * @param path                  路径
     * @param getWorkbookFunction   获取workbook方法
     * @param afterSheetFunction    sheet方法
     * @param afterWorkbookFunction workbook方法
     * @return 文件对象
     */
    File write(String path, GetWorkbookFunction getWorkbookFunction, AfterSheetFunction afterSheetFunction, AfterWorkbookFunction afterWorkbookFunction);

}
